package cn.fz.redisdemo01.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis 配置类
 * 3. 配置 Redis 序列化
 * Spring Boot 默认使用 JdkSerializationRedisSerializer 进行序列化，
 * 而我们通常更倾向于使用 StringRedisSerializer 和 Jackson2JsonRedisSerializer 进行更高效的序列化操作，尤其是在处理 JSON 数据时。
 * 我们可以通过配置 RedisTemplate 来使用自定义的序列化器：
 * 原文链接：https://blog.csdn.net/u014390502/article/details/142702236
 */
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 使用String序列化器序列化Key
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // 使用Jackson2JsonRedisSerializer序列化Value
        ObjectMapper objectMapper = new ObjectMapper();
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(objectMapper, Object.class);
        redisTemplate.setValueSerializer(serializer);
        return redisTemplate;
    }
}
